import numpy as np
import pandas as pd
from pyecharts import *

class ChipotleNan:
    def __init__(self):
        self.csv_name = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv'
        self.df = pd.read_csv(self.csv_name, sep ='\t')

    def series_to_bar(self, series, name='test', table_name='test1'):
        bar = Bar(name)
        axis0 = series.index
        axis1 = np.round(series.values.ravel(), 1)
        bar.add('商家A', axis0, axis1, is_label_show=True, is_datazoom_show=True)
        return bar
# 1、这段时间内餐厅的销售流水总额（5分）
    def money_sum(self):
        ipr= self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        ipr= ipr.copy()
        return ipr
# 2、这段时间内销售个数最多的商品 （5分）
    def get_num_max(self):
        df1 = self.df.copy()
        df1_name_max= df1.groupby('item_name').sum()
        bar = df1_name_max.sort_values(['quantity'], ascending=False)
        print(bar.head(1))
        return bar.head(1)
# 3、这段时间内销售金额最多的商品（5分）
    def get_money_max(self):
        amount = self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        df1 = self.df.copy()
        df1['amount'] = amount
        a = df1.sort_values(['amount'], ascending=False)
        print(a.head(1))
# 4、每种商品的销售个数，并做图（10分）
    def how_many(self):
        a = self.df.quantity.astype('float64')
        bar = Bar('每种商品的销售个数')
        attr = self.df.item_name
        attr1 = attr.head(10)
        v1 = a.head(10)
        bar.add('商品销售', attr1, v1, is_label_show=True, is_datazoom_show=True, xaxis_interval=0, xaxis_rotate=90)
        return bar
# 5、每种商品的销售金额，并做图（10分）
    def how_much_money(self):
        ipr = self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        df1 = self.df.copy()
        df1['ipr'] = ipr
        df1_grounp = df1.groupby('item_name').sum()
        df1_grounp = df1_grounp.drop('order_id', axis=1, inplace=True)
        df1_grounp = df1_grounp.drop('quantity', axis=1, inplace=True)
        va = df1_grounp.values  # 生成一个
        print(va.shape)
        return df1_grounp
    def bar_how_much_are_sold_per_item(self):
        info = self.how_many()
        bar = self.series_to_bar(info,'每种商品销售金额')
        return bar
# 6、餐厅的产品的种类及对应的商品配料的价格，做出表格（10分）
    def the_price_of_each_ingredient(self):
        df1 = self.df.copy()
        df1_group = df1.drop_duplicates(['item_name', 'choice_description'])
        df1_group = df1_group.drop('order_id', axis=1)
        df1_group = df1_group.drop('quantity', axis=1)
        return df1_group
# 7、每种商品销售金额在流水总额中所占的比例，做圆饼图（10分）
    def sell_one_shop_rate(self):
        attr=self.df.item_name
        a=self.df.quantiey.astype('float64')
        b = self.df.item_price.str.replace('$', '').astype('float64')
        df_sum=(a*b)
        df1= int(list(df_sum.cumsum())[9])
        b = b.head(10).values
        rate = b /df1
        bar = Pie('每种商品的销售金额')
        bar.add('商品销售', attr, rate, is_stack=True)
        return bar
# 8、每个定单金额，并做bar图（10分）
    def one_money(self):
        b = self.df.item_price.str.replace('$', '').astype('float64')
        bar = Bar('每种商品的销售金额')
        attr = self.df.item_name
        v1 = b.head(10)
        bar.add('商品销售', attr, v1, is_label_show=True, is_datazoom_show=True, xaxis_interval=0,
                xaxis_rotate=90)
        return bar
# 9、产品“Chicken Bowl”,选择最多的配料（5分）

# 10、产品“Chicken Bowl”每种配料选择的次数，及所占比例，并做圆饼图（10分）
    def one_shop_num_to_rate(self):
        a1 = self.df[(self.df['item_name'] == 'Chicken Bowl')]
        b1 = a1.groupby(by='choice_description').sum().sort_values('quantity',ascending=False)
        pie = Pie('Chicken Bowl”每种配料选择的次数，及所占比例')
        pie.add('占比', b1.index, b1['quantity'], is_lable_show=True)
        return pie